package spese.gestore.androidiani;

import spese.gestore.androidiani.SpeseDb.SpeseMetaData;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Questa classe definisce il database delle List View all'interno all'applicazione
 * @author Fusinato Lorenzo - Androidiani
 *
 */

public class ValuteDb {  

    SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="DbValute";//nome del db
    private static final int DB_VERSION=1; //numero di versione del nostro db
   
    
    /**
     * Quando istanziamo questa classe, istanziamo anche l'helper
     * @param ctx
     */
    public ValuteDb(Context ctx){
            mContext=ctx;
            mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
    }
   
    /**
     * Il database su cui agiamo è leggibile/scrivibile
     */
    public void open(){  //il database su cui agiamo è leggibile/scrivibile
            mDb=mDbHelper.getWritableDatabase();
           
    }
    
    /**
     * Chiudiamo il database su cui agiamo
     */
    public void close(){ //chiudiamo il database su cui agiamo
            mDb.close();
    }
   
   
    //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione
   // consiglio:si potrebbe creare una classe Prodotto, i quali oggetti verrebbero passati come parametri dei seguenti metodi, rispettivamente ritornati. Lacio a voi il divertimento

    
    /**
     * Metodo per inserire i dati
     * @param header
     * @param footer
     * @param activity
     */
    public void insertValute(String name,String sigla,float cambio, String data){ //metodo per inserire i dati
            ContentValues cv=new ContentValues();
            cv.put(ValuteMetaData.VALUTE_NAME_KEY, name);
            cv.put(ValuteMetaData.VALUTE_SIGLA_KEY, sigla);
            cv.put(ValuteMetaData.VALUTE_CAMBIO_KEY, cambio);
            cv.put(ValuteMetaData.VALUTE_DATA_KEY, data);
            mDb.insert(ValuteMetaData.VALUTE_TABLE, null, cv);
    }
    
    public float getCambio(String valuta){
    	float cambio;
    	String[] valuta_s = {valuta};
    	Cursor c = mDb.query(ValuteMetaData.VALUTE_TABLE, null, ValuteMetaData.VALUTE_SIGLA_KEY + "=?", valuta_s, null, null, null);
    	c.moveToFirst();
    	cambio = c.getFloat(3);
    	return cambio;
    }
    
	/**
	 * Il metodo update se per fare l'update di uno specifico record nel db
	 * @param rowId
	 * @param name
	 * @param sigla
	 * @param cambio
	 * @param data
	 * @return
	 */
	public boolean update(String rowId, String name, 
		    String sigla, float cambio, String data) {
		
		ContentValues args = new ContentValues();
        args.put(ValuteMetaData.VALUTE_NAME_KEY, name);
        args.put(ValuteMetaData.VALUTE_SIGLA_KEY, sigla);
        args.put(ValuteMetaData.VALUTE_CAMBIO_KEY, cambio);
        args.put(ValuteMetaData.VALUTE_DATA_KEY, data);
        return mDb.update(ValuteMetaData.VALUTE_TABLE, args, 
                         ValuteMetaData.ID + "=" + rowId, null) > 0;
		
	}
    
    /**
     * Metodo per eliminare una riga Missione dalla tabella passando il parametro row(riga)
     * @param row
     * @return
     */
    public boolean delete(String row) {
		
    	return mDb.delete(ValuteMetaData.VALUTE_TABLE, ValuteMetaData.ID + "=" + row, null) > 0;
		
	}
      
    
    /**
     * Metodo per fare la query di tutti i dati
     * @return
     */
    public Cursor fetchValute(){ //metodo per fare la query di tutti i dati
            return mDb.query(ValuteMetaData.VALUTE_TABLE, null,null,null,null,null,null);              
    }
    
    /**
     * Metodo che ritorna uno string contenente il record alla riga "row" e colonna "pos"
     * @param row
     * @param pos
     * @return
     */
    public String getRecord(String row, int pos){
    	String name = null;
    	
    	Cursor c = mDb.query(ValuteMetaData.VALUTE_TABLE, null, ValuteMetaData.ID + "=" + row, null, null, null, null);
    	
    	c.moveToFirst();
    	
    	name = String.valueOf(c.getString(pos));
    	
    	return name;
    }
    
    /**
     * Metodo per fare la query delle valute tramite l'input della data
     * @param data
     * @return
     */
    public Cursor fetchValuteListView(String data){ 
    	    String[] data_query={data};
            return mDb.query(ValuteMetaData.VALUTE_TABLE,null,ValuteMetaData.VALUTE_DATA_KEY+"=?",data_query,null,null,null);              
    }
    
    
    
    /**
     * I metadati della tabella, accessibili ovunque
     * @author Fusinato Lorenzo - Androidiani
     *
     */
    static class ValuteMetaData {  // i metadati della tabella, accessibili ovunque
            static final String VALUTE_TABLE = "Valute";
            static final String ID = "_id";
            static final String VALUTE_NAME_KEY = "name";
            static final String VALUTE_SIGLA_KEY = "sigla";
            static final String VALUTE_CAMBIO_KEY = "cambio";
            static final String VALUTE_DATA_KEY = " data";
    }

    /**
     * Codice sql di creazione della tabella
     */
    private static final String VALUTE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
                    + ValuteMetaData.VALUTE_TABLE + " ("
                    + ValuteMetaData.ID+ " integer primary key autoincrement, "
                    + ValuteMetaData.VALUTE_NAME_KEY + " text, "
                    + ValuteMetaData.VALUTE_SIGLA_KEY + " text, "
                    + ValuteMetaData.VALUTE_CAMBIO_KEY + " float, "
                    + ValuteMetaData.VALUTE_DATA_KEY + " text);";

    /**
     * Classe che ci aiuta nella creazione del db
     * @author Fusinato Lorenzo - Androidiani
     *
     */
    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

            public DbHelper(Context context, String name, CursorFactory factory,int version) {
                    super(context, name, factory, version);
            }

            @Override
            public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella

                    _db.execSQL(VALUTE_TABLE_CREATE);
            }

            @Override
            public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                    //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

            }

    }	

}